import numpy as np

_field = {
    'waveSize': 'B',
    'waveIdx' : 'B',
    'wave'    : 'B',
    'gain'    : 'B',
    'ntx'     : 'h',
    'nrx'     : 'h',
    'samples' : 'i',
    'chirps'  : 'i',
    'effbwKhz': 'i',
    'tchirpns': 'i',
    'rbins'   : 'i',
    'vbins'   : 'i',
    'abins'   : 'i',
    'rstart'  : 'i',
}
scan_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)

_field = {
    'iPeakFlag'  : 'B',
    'iDropFlag'  : 'B',
    'iRangeBin'  : 'H',
    'iDopplerBin': 'h',
    'iBeamsBin'  : 'h',
    'iPwrLog2'   : 'h',
    'iSnrLog2'   : 'h',
    'fRangeBin'  : 'f',
    'iStampMs'   : 'I'
}
point_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)

_field = {
    'iPeakFlag'  : 'B',
    'iDropFlag'  : 'B',
    'iRangeBin'  : 'h',
    'iDopplerBin': 'h',
    'iBeamsBin'  : 'h',
    'iPwrLog2'   : 'h',
    'iSnrLog2'   : 'h',
    'fRangeBin'  : 'f',
    'iAngleBin'  : 'h',
    'iAngleSnr'  : 'h'
}
rawpoint_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)

_field = {
    'fAzangle'    : 'f',
    'fElangle'    : 'f',
    'fRange'      : 'f',
    'fPower'      : 'f',
    'fSpeed'      : 'f',
    'fSNR'        : 'f',
    'fRCS'        : 'f',
    'fProbability': 'f',
    'fStdRange'   : 'f',
    'fStdSpeed'   : 'f',
    'fX'          : 'f',
    'fY'          : 'f',
    'uStateFlag'  : 'I',
    'peakIdx'     : 'I',
}
spmTarget_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)


_field = {
    'range'     : 'f',
    'velocity'  : 'f',
    'azimuth'   : 'f',
    'elevation' : 'f',
    'fX'        : 'f',
    'fY'        : 'f',
    'fZ'        : 'f',
    'SNR'       : 'f',
    'power'     : 'f',
    'rbin'      : 'h',
    'vbin'      : 'h',
    'peakIdx'   : 'h'
}
spmOp_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)


_field = {
    'iObjectId'     : 'I',
    'eDynamic'      : 'I',
    'eClass'        : 'I',
    'eValidFlag'    : 'I',
    'eUpdateFlag'   : 'I',
    'eWaveArea'     : 'I',
    'fRcs'          : 'f',
    'fSnr'          : 'f',
    'fPeakVal'      : 'f',
    'fDistY'        : 'f',
    'fStdOfDistY'   : 'f',
    'fDistX'        : 'f',
    'fStdOfDistX'   : 'f',
    'fDistZ'        : 'f',
    'fStdOfDistZ'   : 'f',
    'fVrelY'        : 'f',
    'fStdOfVrelY'   : 'f',
    'fVrelX'        : 'f',
    'fStdOfVrelX'   : 'f',
    'fVrelZ'        : 'f',
    'fStdOfVrelZ'   : 'f',
    'fArelY'        : 'f',
    'fStdOfArelY'   : 'f',
    'fArelX'        : 'f',
    'fStdOfArelX'   : 'f',
    'fArelZ'        : 'f',
    'fStdOfArelZ'   : 'f',
    'fWidth'        : 'f',
    'fLength'       : 'f',
    'fHeightStart'  : 'f',
    'fOrientation'  : 'f',
    'fMirrorProb'   : 'f',
    'fExistenceProb': 'f',
    'fObstacleProb' : 'f',
    'iLifeCounter'  : 'I',
    'iPredictedCounter': 'I',
    'sShapePoints'  : '8f',
    'sRefPointX'    : 'f',
    'sRefPointY'    : 'f',
    'eRefPointType' : 'I',
    'sCenterPointX' : 'f',
    "sCenterPointY" : 'f',
    "sCenterPointZ" : 'f',
    'fFirstX'       : 'f',
    'fFirstY'       : 'f'
}
dpmOp_t = np.dtype({'names': tuple(_field.keys()),'formats': tuple(_field.values())},align=True)
